The identification and sizing of memory in a computer system is a prerequisite for performing diagnostic memory tests. The tests require knowledge of the type of memory present in the system and how many of that type of memory are installed. Main memory in current IBM-compatible personal computers ("PCs") is typically physically organized in replaceable components referred to as single in-line memory modules ("SIMMs"). SIMMs are replaceable snap-in, snap-out components so designed to allow relatively unsophisticated computer users to replace or increase computer memory. SIMMs offer versatility in configuration of computer memory, available in individual sizes from one megabyte to 16 megabytes per SIMM, a computer memory having multiple SIMMS in the system.
Traditionally, PCs have employed a basic input/output system power on-self test ("BIOS POST") to perform sizing of computer memory. BIOS POST is an initialization procedure stored in BIOS firmware and executed when a system is booted; part of this BIOS POST procedure is to size the memory that is in the system, typically storing the result in CMOS RAM (complementary metal oxide semiconductor random access memory that is constantly powered to allow it to function even when the computer is turned off) to inform the system of the amount of memory available. A memory controller in the PC requires knowledge of the amount of memory within the computer to allow it to fully address the memory.
The intent of the above-described BIOS POST memory sizing procedure is to determine the amount of fully-functioning memory within the computer. PCs are not currently designed to deal with memory that is less than fully functional. Thus, BIOS POST tests the full functionality of memory and, if it finds a defect in any portion of a unit of memory (a particular SIMM or SIMM bank), it will simply disregard the entire unit of memory, and the computer will function without accessing the unit at all. BIOS POST is thus an initialization procedure rather than a diagnostic, and therefore interested in only tabulating fully-functioning memory in the system. Detecting defective memory is quite simple: accesses are performed on memory locations, and if they do not respond absolutely perfectly then that location is discounted, and, as described previously, the entire SIMM is marked as defective and not programmed into the memory controller's tables.
The BIOS POST boot up sequence will not even flag a very defective memory component. Instead, the sum total of memory that is displayed on the screen is merely reduced from what is expected. The result is a fairly subtle indicator to a customer that they do not have in memory what they should. Thus, what is needed in the art is a process for detecting a defective memory, flagging it in a very obvious fashion and then informing a user that there is defective memory to be replaced.
In stark contrast to a BIOS POST memory initialization procedure, a diagnostic memory sizing procedure should identify all memory that is plugged into the system, regardless of how functional it may be. If, as in the case of BIOS POST, defective memory is simply discounted from the sum total, then the subsequent diagnostic memory test does not test it, and it is not obvious to the user that there actually exists defective memory. Therefore, a diagnostic memory sizing procedure must be very liberal about including as much memory as is possible and determining nonexistent memory from defective memory. To a computer, defective memory can sometimes appear similar to missing memory. A diagnostic sizing procedure should discern memory presence from memory absence so that a subsequent memory diagnostic test can subsequently examine it to determine whether it is indeed defective, and, if defective, identify it to the user, allowing the user to take remedial action.
The prior art is entirely deficient in providing a procedure for determining the amount of memory present in a computer system, no matter how functional that memory is. In other words, there has not yet existed a method of determining the difference between defective memory and nonexistent memory.